from aiogram import Router, F
from aiogram.filters import StateFilter
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import StatesGroup, State
from aiogram.types import Message

from keyboards.set_menu import cancel_keyboard, just_keyboard

from db.PGConnector import PGFamilyUser, PGUser
from .utils import try_except_decorator

router = Router()


class BotState(StatesGroup):
    joining_family_hash = State()

@router.message(StateFilter(None), F.text == "Вступить в семью")
async def cmd_join(message: Message, state: FSMContext):
    await message.answer(text="Для вступления в семью необходимо ввести пригласительный код.",
                         reply_markup=cancel_keyboard())
    await state.set_state(BotState.joining_family_hash)

@try_except_decorator
@router.message(F.text == 'Вернуться в меню')
async def cmd_cancel(message: Message, state: FSMContext):
    await state.clear()
    await message.answer(
        text="Действие отменено",
        reply_markup=just_keyboard()
    )
    

@try_except_decorator
@router.message(BotState.joining_family_hash)
async def joined_to_family(message: Message, state: FSMContext):
    await state.update_data(hash_link=message.text)

    family_hash = await state.get_data()
    user_id = message.chat.id
    nickname = message.chat.username

    pg_user = PGUser()
    pg_user.create_user(user_id, nickname)

    pg_family_user = PGFamilyUser()
    user_added = pg_family_user.join_family(family_hash['hash_link'], user_id)

    if user_added:
        await message.answer(text=f'✅ Вы успешно подключились к семье.', reply_markup=just_keyboard())
    else:
        await message.answer(text='❗️Не удалось вступить в семью. Убедитесь в том, что код корректный и вы уже не '
                                  'не состоите в этой семье.',  reply_markup=cancel_keyboard())
        
    
    



